Calculation View Performance

Agenda

  • HANA Architektur
  • Tools
    • Performance Analyze Mode
    • Debug Query Mode
    • Explain Plan
    • SQL Analyzer / PlanViz
  • Tipps & Tricks zur Performance-Optimierung
  • Literatur/Blogs

HANA Architektur

  • Spaltenbasierung
  • Kompression
  • In Memory
  • Insert-Only - Main & Delta

HANA ist schnell, wenn

  • Die Operationen auf komprimierten Daten ausgeführt werden können
  • Ausreichend Hardware zur Verfügung steht
    • CPU Anzahl, zur Verteilung von Berechnungen
    • Ausreichend freier Speicher (50% bei Hot-Nodes)

Performance Analysis Mode (1/2)

  • Performance Analysis Mode
    • Statische Analyse von Calc Views
    • Zeigt Mengengerüst von Quelltabellen
    • Partitionierung von Tabellen
  • Geeignet für:
    • Vergleich von JOIN-Bedingungen und Partitionen der Tabellen
  • Abschätzung Mengengerüst bei Ausführung
  • Anzahl Sätze nach JOIN abschätzen, Potential zur Verdichtung von Sätzen

Performance Analysis Mode – Beispiel und Aufruf

  • Calculation View in Design-Sicht aufrufen ->
  • Button Performance Analysis anklicken
  • Bei manchen Knoten wird zusätzlich der Tab Performance Analysis angezeigt, siehe unten.

SAP Documentation

Beispiel für eine Warnung im Performance Analysis Mode

Debugging von Calculation Views

  • Knotenweise Analyse der Ausführung eines Calculation Views
  • Eingabe: SQL-Query auf oberstem Knoten
    • Für jeden Knoten wird daraus eine Query generiert
  • Erlaubt die Analyse der Logik in den Knoten

Beispiel:

  • Welche Spalten werden in welchem Knoten abgerufen?
  • Auswirkung Keep Flag
  • Ergebnis von JOIN oder UNION verstehen
  • Berechnung auf Einzelsatzebene nachvollziehen

Wie ruft man den Debugger auf

  • Design-Sicht Calculation View
  • Button mit dem Käfer anklicken
  • Auf den Semantics-Knoten gehen
  • In den Details auf den Tab Debugging:

  • Execute drücken
  • Einzelne Knoten analysieren

Beispiel: Debugging von Calculation Views

  • Demo und Übung
    • Aufruf vom Debugger für CV_CUBE_TASKS_USERS
  • Übung: Analyse vom Keep-Flag mit Debugger:
    • CV_KEEP_FLAG_DUE_DATE_01

Debugging von Calculation Views

Was kann man nicht mit dem Debugger analysieren?

  • JOIN-Pruning von Knoten => Man erhält eine Fehlermeldung für Knoten, die
    nicht ausgeführt werden
  • Filter Pushdown => SQL-Where-Bedingung wird nur in oberstem Knoten
    angezeigt
  • Workaround: Manuell den Filter in den einzelnen Knoten hinzufügen =>
    Einzelsatz-Analyse möglich
    Debugger geeignet zur Analyse der Logik, weniger zur Performance-
    Optimierung

Explain

  • Klassisches SQL-Tool, das es so auch für andere Datenbanken gibt.
  • Hilfreich auf hoher Ebene
  • Aufruf über die SQL-Konsole

Beispiel

Ausführungsplananalyse von Calculation Views

Tools

  • PlanViz in Eclipse
  • SQL Analyzer im Database Explorer
  • HANA SQL Analyzer in Visual Studio Code

PlanViz und Calculation Views

  • Analyse des Laufzeitverhaltens von Calculation Views
    • Abgefragte Tabellen
    • Speicherverbrauch, Laufzeit
    • Ausführungsplan, Operationen mit hohem Anteil an Laufzeit identifizieren
  • Statische vs. Dynamische Analyse
  • Verhalten mit verschiedenen Queries testen
    • Granulare Abfrage vs. Aggregierte Abfrage
    • Query mit Filterbedingung
    • Query mit reduzierten Spalten
    • Teure Queries erkennen

Starten der Ausführungsplananalyse

  • Passendes SQL zum Zugriff auf den CalcView in der SQL-Konsole erfassen oder über den Debugger die Debug Query abgreifen.

PlanViz in Eclipse und HANA SQL

  • In Eclipse in die PlanViz Perspektive gehen
  • Datei öffnen

SQL Analyzer in WebIDE

  • Direkt auf Analyze SQL gehen

HANA SQL Analyzer in Visual Studio Code

  • Datei dort öffnen
hxeadm@hxe:/usr/sap/HXE/HDB00/hxe.brandeis.de/trace> ls *.plv
planviz_68A2E35860F7C3429005CC3D5F8B2708.plv

Aufruf PlanViz – Ausführungssicht

  • Perspective: SAP HANA PlanViz
    • Übersicht:
    • Speicherverbrauch
    • Ausführungszeit
    • Dominante Operatoren
    • Verwendete Tabellen
  • Detailsicht (Executed Plan):
    • Ablauf
    • Operatoren (Join, Aggregation, Column Search)
    • Logischer vs. Physischer Plan

Logischer und Physischer Plan

Logischer Plan

  • Höhere Flughöhe
  • Wie soll das Ergebnis erzeugt werden
  • Granularität:
    • JOIN
    • COLUMN Search - Z.B. Nachlesen von einzelnen Spalten
    • Filter
  • Sehr unterschiedliche Darstellung, je nach Ausführungs-Engine

Physischer Plan

  • Detailierte Flughöhe
  • Auf Spaltenebene
  • Wie wurden die Schritte des logischen Plans umgesetzt
  • Auf Granularität der einzelnen Operationen einer Spalte
  • Bis zum Dictionary Zugriff

Planviz in Eclipse

Beispiel: Performance-Analyse von

Calculation Views

  • Demo und Übung:
    • Aufruf vom PlanViz für CV_CUBE_STARJOIN_SOL
    • Alle Spalten abfragen vs. Nur Spalten von Tabellen TASKS und USERS
  • Übung Ausführung eines CalcViews mit JOIN analysieren

Performance Tipps & Tricks (1/2)

  • Ergebnis aggregiert an Frontend liefern
    • Richtiger Detailgrad und Ergebniseinschränkung
    • Aggregationen und Berechnung in der HANA durchführen
    • Bei Bedarf Voraggregation in unteren Knoten des Calculation View durchführen
  • Filter Push-Down prüfen
    • Ergebnismenge frühzeitig einschränken
    • Werden Filterbedingungen an die SELECT-Anweisung für die Quelltabellen gereicht?
    • Bei Bedarf Filterung mit Parametern einbauen
  • Ausführung von Joins prüfen
    • Kardinalität eintragen (manuell prüfen!)
    • Referential Join, Left Outer Join mit Kardinalität n:1 : Werden nur bei Bedarf ausgeführt
    • Join-Pruning

Performance Tipps & Tricks (2/2)

  • UNION-Knoten
    • Union node pruning: Nicht alle Quellknoten abfragen
      • Strategie 1: Spalte Source mit Constant Mapping definieren und * Filter auf diese Spalte
      • Strategie 2: Pruning Configuration Table in Semantik-Knoten
  • Modellierungsansätze ausprobieren
    • JOIN vs. UNION
    • UNION in Kombination mit Aggregation meist schneller als JOIN und Aggregation
  • Berechnete Spalten
    • Berechnung auf Kennzahlen auf möglichst aggregierter Ebene durchführen
    • Berechnete Spalten in Filter und Join vermeiden bzw. Performance-Auswirkung prüfen
      • Typkonvertierung vermeiden in Filter, Join
      • Ausführung in SQL Engine statt Column Engine (andere Syntax!)
  • Große Tabellen Partitionieren

SAP HANA Performance Guide for Developers

SAP HANA Performance Guide for Developers

Parallization

Pruning Configuration Table